package messages

// ConnectorCommand 是所有连接器命令的基础接口
type ConnectorCommand interface {
	isConnectorCommand()
}

// ConnectorResponse 是所有连接器响应的基础接口
type ConnectorResponse interface {
	isConnectorResponse()
}

// InitConnectorCommand 是初始化连接器的命令
type InitConnectorCommand struct {
	// ConnectorType 是连接器类型
	ConnectorType string
	// Config 是连接器配置
	Config map[string]interface{}
}

func (*InitConnectorCommand) isConnectorCommand() {}

// InitConnectorResponse 是对InitConnectorCommand的响应
type InitConnectorResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是操作失败时的错误消息
	Error string
	// ConnectorID 是连接器ID
	ConnectorID string
}

func (*InitConnectorResponse) isConnectorResponse() {}

// StartConnectorCommand 是启动连接器的命令
type StartConnectorCommand struct {
	// ConnectorID 是连接器ID
	ConnectorID string
}

func (*StartConnectorCommand) isConnectorCommand() {}

// StartConnectorResponse 是对StartConnectorCommand的响应
type StartConnectorResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是操作失败时的错误消息
	Error string
}

func (*StartConnectorResponse) isConnectorResponse() {}

// StopConnectorCommand 是停止连接器的命令
type StopConnectorCommand struct {
	// ConnectorID 是连接器ID
	ConnectorID string
}

func (*StopConnectorCommand) isConnectorCommand() {}

// StopConnectorResponse 是对StopConnectorCommand的响应
type StopConnectorResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是操作失败时的错误消息
	Error string
}

func (*StopConnectorResponse) isConnectorResponse() {}

// ReadDataCommand 是从源连接器读取数据的命令
type ReadDataCommand struct {
	// ConnectorID 是连接器ID
	ConnectorID string
	// BatchSize 是要读取的批次大小
	BatchSize int
	// Timeout 是读取超时时间(毫秒)
	Timeout int
}

func (*ReadDataCommand) isConnectorCommand() {}

// ReadDataResponse 是对ReadDataCommand的响应
type ReadDataResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是操作失败时的错误消息
	Error string
	// Records 是读取的记录
	Records []Record
	// Offset 是偏移信息
	Offset interface{}
}

func (*ReadDataResponse) isConnectorResponse() {}

// WriteDataCommand 是向接收器连接器写入数据的命令
type WriteDataCommand struct {
	// ConnectorID 是连接器ID
	ConnectorID string
	// Records 是要写入的记录
	Records []Record
}

func (*WriteDataCommand) isConnectorCommand() {}

// WriteDataResponse 是对WriteDataCommand的响应
type WriteDataResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是操作失败时的错误消息
	Error string
	// FailedRecords 是写入失败的记录
	FailedRecords []Record
}

func (*WriteDataResponse) isConnectorResponse() {}

// CommitOffsetCommand 是提交偏移的命令
type CommitOffsetCommand struct {
	// ConnectorID 是连接器ID
	ConnectorID string
	// Offset 是要提交的偏移
	Offset interface{}
}

func (*CommitOffsetCommand) isConnectorCommand() {}

// CommitOffsetResponse 是对CommitOffsetCommand的响应
type CommitOffsetResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是操作失败时的错误消息
	Error string
}

func (*CommitOffsetResponse) isConnectorResponse() {}

// FlushCommand 是刷新缓冲记录的命令
type FlushCommand struct {
	// ConnectorID 是连接器ID
	ConnectorID string
}

func (*FlushCommand) isConnectorCommand() {}

// FlushResponse 是对FlushCommand的响应
type FlushResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是操作失败时的错误消息
	Error string
}

func (*FlushResponse) isConnectorResponse() {}

// GetConnectorStatusCommand 是获取连接器状态的命令
type GetConnectorStatusCommand struct {
	// ConnectorID 是连接器ID
	ConnectorID string
}

func (*GetConnectorStatusCommand) isConnectorCommand() {}

// GetConnectorStatusResponse 是对GetConnectorStatusCommand的响应
type GetConnectorStatusResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是操作失败时的错误消息
	Error string
	// Status 是连接器状态
	Status string
	// Metrics 是连接器指标
	Metrics map[string]interface{}
}

func (*GetConnectorStatusResponse) isConnectorResponse() {}

// Record 表示数据记录
type Record struct {
	// Key 是记录键
	Key []byte
	// Value 是记录值
	Value []byte
	// Headers 是记录头
	Headers map[string]string
	// Timestamp 是记录时间戳
	Timestamp int64
	// Topic 是记录主题
	Topic string
	// Partition 是记录分区
	Partition int
	// Offset 是记录偏移
	Offset int64
}

// ListConnectorTypesCommand 是列出连接器类型的命令
type ListConnectorTypesCommand struct {
	// Category 是连接器类别(source, sink)
	Category string
}

func (*ListConnectorTypesCommand) isConnectorCommand() {}

// ListConnectorTypesResponse 是对ListConnectorTypesCommand的响应
type ListConnectorTypesResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是操作失败时的错误消息
	Error string
	// Types 是连接器类型
	Types []ConnectorTypeInfo
}

func (*ListConnectorTypesResponse) isConnectorResponse() {}

// ConnectorTypeInfo 表示连接器类型信息
type ConnectorTypeInfo struct {
	// Name 是连接器类型名称
	Name string
	// Category 是连接器类别(source, sink)
	Category string
	// Description 是连接器描述
	Description string
	// ConfigSchema 是连接器配置模式
	ConfigSchema map[string]interface{}
}
